#include "Robot.h"
#include "AfficheurConsole.h"
#include "Obstacle.h"
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <queue>
#include <vector>
using namespace std;


int split(vector<string>& vecteur, string chaine, char separateur)
{
    vecteur.clear();
    string::size_type stTemp = chaine.find(separateur);
    while(stTemp != string::npos)
    {
    vecteur.push_back(chaine.substr(0, stTemp));
    chaine = chaine.substr(stTemp + 1);
    stTemp = chaine.find(separateur);
    }
    vecteur.push_back(chaine);
    return vecteur.size();
} 

void parseur(Robot r, vector<string> commandeComplete){
    string commande = commandeComplete.front();
        if(commande == "avancer"){
            r.avancer(atoi(commandeComplete.front().c_str()),atoi(commandeComplete.front().c_str()));
        }else

        if(commande == "tourner"){
            r.tourner(commandeComplete.front());
        }else

        if(commande == "rencontrerObstacle"){
            r.rencontrerObstacle(new Obstacle(atoi( commandeComplete.front().c_str() ) ) );
        }else

        if(commande == "evaluerObstacle"){
            cout << "L'obstacle mesure: " << r.evaluerObstacle() << endl ;
        }else

        if(commande == "saisir"){
            r.saisir(new Objet(atoi( commandeComplete.front().c_str()  ) ));
        }else

        if(commande == "peser"){
            cout << "l'objet pese: " << r.peser() << endl;
        }else

        if(commande == "poser"){
            r.poser();
        }else

        if(commande == "figer"){
            r.figer();
        }else

        if(commande == "repartir"){
            r.repartir();
        }else
        if(commande == ""){
            cout << endl;
        }
        else
            cerr << "Instruction non reconnue" << endl;
}


int main() {
    Robot r;
    r.attache(new AfficheurConsole(&r));

   ifstream fichier("listeCommndes.txt");

   if(fichier)
   {
        priority_queue<vector<string> > listeCommandes; //toute les commandes
        string ligne; //une ligne lues
        vector <string> commande; //une commande     
        while(getline(fichier, ligne)){
             split( commande, ligne, ' ' );
             listeCommandes.push(commande);
             parseur(r, commande);
             cout << ligne << endl;    
        }
   }
   else{ //pas de fichier --> on execute ces commandes
    cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;

    //cout << "\t mouvement" << endl;
    r.avancer(2,3);
    r.tourner("S");
    r.avancer(8,9);
    //cout << endl;

    //cout << "\t obstacle" << endl;
    r.evaluerObstacle(); 
    r.rencontrerObstacle(new Obstacle(10));
    cout << "L'obstacle mesure: " << r.evaluerObstacle() << endl ;
    //cout << endl;

    //cout << "\t objet" << endl;
    r.saisir(new Objet(25));
    r.peser();
    //cout << "l'objet pese: " << r.peser() << endl;
    r.poser();
    //cout << endl;


    //cout << "\t mouvement++" << endl;
    r.avancer(7,3); //on ne peut avancer on est devant un obstacle
    r.tourner("E");
    r.avancer(0,1); 
    //cout << endl;

    //cout << "\t figer repartir" << endl;
    r.figer();
    r.avancer(6,3); //on ne peut avancer on est devant un obstacle
    r.repartir();
    r.avancer(9,3); //on ne peut avancer on est devant un obstacle
    //cout << endl;

    //cout << "\t figer repartir++" << endl;
    r.rencontrerObstacle(new Obstacle(10));
    r.figer();
    r.repartir();
    r.saisir(new Objet(25));
    r.figer();
    r.repartir();
    //cout << endl;
   }


}
